#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <sched.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#define STACK_SIZE (1024 * 1024)

static char child_stack[STACK_SIZE];
char *const child_args[] = {
    "/bin/bash",
    NULL,
};

int child_main(void *args)
{
    printf("在子进程中!\n");
    sethostname("NewNameSpace", 12);
    execv(child_args[0], child_args);
    return 1;
}

int main()
{
    //程序运行前运行ipcmk -Q创建一个新的队列
    //执行本程序后，在子进程中执行ipcs -q发现找不到刚刚创建的队列了
    printf("程序开始: \n");
    int child_pid = clone(child_main, child_stack + STACK_SIZE, CLONE_NEWUTS | CLONE_NEWIPC | SIGCHLD, NULL);
    printf("errno: %s", strerror(errno));
    waitpid(child_pid, NULL, 0);
    printf("已退出\n");
    return 0;
}